﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SWBetongXaydung.GUI.Common;
using SWBetongXaydung.BLL;
using SWBetongXaydung.GUI.Utils;
using SWBetongXaydung.DAL;

namespace SWBetongXaydung.GUI.DuLieu
{
    public partial class UCDonGiaNhienLieu : BaseUserControl
    {
        bool allowUpdate = false;
        bool isAdd = false;
        public UCDonGiaNhienLieu()
        {
            InitializeComponent();

            InitGrid();
            allowUpdate = false;
            LoadLoaiNhienLieu();
            allowUpdate = true;
            InitButton();
        }
        
        void InitButton()
        {
            errorNotify.Clear();
            btnHieuChinh.Enabled = btnXoa.Enabled = false;
            btnThem.Enabled = true;
            btnBoQua.Visible = false;
            btnLuu.Enabled = false;
            dgvDonGia.Enabled = true;
            cmbLoaiNhienLieu.Enabled = cmbNam.Enabled = cmbThang.Enabled = false;
            nDonGia.Enabled = false;
            LoadGrid();
            btnThem.Focus();
        }

        void InitGrid()
        {
            dgvDonGia.AutoGenerateColumns = false;
            colDonGia.DataPropertyName = "DonGia";
            colThang.DataPropertyName = "Thang";
            colNam.DataPropertyName = "Nam";
            colLoaiNhienLieu.DataPropertyName = "TenLoaiNhienLieu";
            dgvDonGia.Columns["colDonGia"].DefaultCellStyle.Format = "#,0.00";
        }

        void LoadGrid()
        {
            if (allowUpdate)
            {
                var list = DonGiaNhienLieuBLL.GetList();
                bdDonGia.DataSource = list;
                dgvDonGia.DataSource = bdDonGia;
            }
        }

        void LoadLoaiNhienLieu()
        {
            var list = LoaiNhienLieuBLL.GetList();
            cmbLoaiNhienLieu.DataSource = list;
            cmbLoaiNhienLieu.DisplayMember = "TenLoaiNhienLieu";
            cmbLoaiNhienLieu.ValueMember = "IDLoaiNhienLieu";
            if (list != null && list.Count > 0)
                dgvDonGia.Enabled = true;
            else
                dgvDonGia.Enabled = false;
        }

        private void dgvDonGia_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex == 0 || e.ColumnIndex == 1)
            {
                int y = 0;
                if (!int.TryParse(e.FormattedValue.ToString(), out y))
                {
                    DialogUtils.ShowError("Bạn phải nhập số");
                    e.Cancel = true;
                    return;
                }
                int thang = int.Parse(e.FormattedValue.ToString());
                if (e.ColumnIndex == 0 && (thang < 0 || thang > 12))
                {
                    DialogUtils.ShowError("Bạn nhập sai tháng");
                    e.Cancel = true;
                    return;
                }
            }
            else if (e.ColumnIndex == 2)
            {
                double y = 0;
                if (!double.TryParse(e.FormattedValue.ToString(), out y))
                {
                    DialogUtils.ShowError("Bạn phải nhập số");
                    e.Cancel = true;
                    return;
                }
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            isAdd = true;
            InitWhenAddOrEditPress();
        }

        void InitWhenAddOrEditPress()
        {
            btnThem.Enabled = btnHieuChinh.Enabled = btnXoa.Enabled = false;
            btnLuu.Enabled = btnBoQua.Visible = true;
            dgvDonGia.Enabled = false;
            nDonGia.Enabled = true;
            cmbLoaiNhienLieu.Enabled = cmbThang.Enabled = cmbNam.Enabled = true;
            cmbThang.Focus();
        }

        private void btnHieuChinh_Click(object sender, EventArgs e)
        {
            isAdd = false;
            InitWhenAddOrEditPress();
            cmbThang.Enabled = cmbNam.Enabled = cmbLoaiNhienLieu.Enabled = false;
        }

        bool ValidateData()
        {
            errorNotify.Clear();
            if (cmbLoaiNhienLieu.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbLoaiNhienLieu, "Bạn chưa chọn loại nhiên liệu");
                cmbLoaiNhienLieu.Focus();
                return false;
            }
            int i = 0;
            if (!int.TryParse(cmbThang.Text, out i))
            {
                errorNotify.SetError(cmbThang, "Bạn chưa chọn tháng");
                cmbThang.Focus();
                return false;
            }
            if (!int.TryParse(cmbNam.Text, out i))
            {
                errorNotify.SetError(cmbNam, "Bạn chưa chọn năm");
                cmbNam.Focus();
                return false;
            }
            return true;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                bool isSuccess = false;
                if (isAdd)
                {
                    //Thêm mới
                    DonGiaNhienLieu dg = new DonGiaNhienLieu();
                    dg.IDLoaiNhienLieu = int.Parse(cmbLoaiNhienLieu.SelectedValue.ToString());
                    dg.Nam = int.Parse(cmbNam.Text);
                    dg.Thang = int.Parse(cmbThang.Text);
                    dg.DonGia = nDonGia.Value;
                    CODE_RESULT_RETURN rs = DonGiaNhienLieuBLL.Add(dg);
                    if (rs == CODE_RESULT_RETURN.TenTrung)
                    {
                        errorNotify.Clear();
                        errorNotify.SetError(cmbThang, "Đơn giá cho tháng này đã tồn tại");
                        cmbThang.Focus();
                        isSuccess = false;
                        return;
                    }
                    else
                    {
                        isSuccess = true;
                    }
                }
                else
                {
                    //Cập nhật
                    var current = bdDonGia.Current as DonGiaNhienLieu;
                    if (current != null)
                    {
                        current.DonGia = nDonGia.Value;
                        var rs = DonGiaNhienLieuBLL.Update(current);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                        {
                            isSuccess = false;
                            DialogUtils.ShowError("Cập nhật thất bại");
                            cmbThang.Focus();
                            return;
                        }
                        else
                        {
                            isSuccess = true;
                        }
                    }
                }
                if (isSuccess)
                    InitButton();
            }
        }

        private void bdDonGia_CurrentChanged(object sender, EventArgs e)
        {
            try
            {
                var current = bdDonGia.Current as DonGiaNhienLieu;
                if (current != null)
                {
                    btnXoa.Enabled = true;
                    btnHieuChinh.Enabled = true;
                    cmbLoaiNhienLieu.SelectedValue = current.IDLoaiNhienLieu;
                    cmbNam.Text = current.Nam.ToString();
                    cmbThang.Text = current.Thang.ToString();
                    nDonGia.Value = (decimal)current.DonGia;
                }
                else
                    btnXoa.Enabled = false;
            }
            catch (Exception)
            {

                btnXoa.Enabled = false;
                btnHieuChinh.Enabled = false;
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            var current = bdDonGia.Current as DonGiaNhienLieu;
            if (current != null)
            {
                if (DialogUtils.ShowYesNo("Bạn có chắc muốn xóa") == DialogResult.Yes)
                {
                    var rs = DonGiaNhienLieuBLL.Delete(current.IDDonGia);
                    if (rs == CODE_RESULT_RETURN.ThatBai)
                        DialogUtils.ShowError("Không thể xóa đơn giá này");
                    else
                        InitButton();
                }
            }
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            InitButton();
        }

        private void nDonGia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
                btnLuu.PerformClick();
        }
    }
}
